package com.woniuxy.order.configuration;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

/**
 * @author: 15489  <br/>
 * Date: 2022/3/25:11:46  <br/>
 * Description:
 */

@Configuration
public class RestTemplateConfiguration {
    @Bean
    @LoadBalanced //在集群环境下需要开启负载均衡
    public RestTemplate restTemplate(){
//    全局配置超时时间
        SimpleClientHttpRequestFactory factory=new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(2000);
        factory.setReadTimeout(2000);
//        重在理解 ribbon有超时机制 默认连接超时 读取超时时间默认都是一秒
//        但是 如果只是ribbon进行负载均衡调用其他微服务 那么 ribbon是关闭了超时时间 因此 被调用方面需要运行多长时间都不会被限制
//        而在 openfeign 种设置了 ribbon 的过期时间 因此 之后在使用openfeign是需要注意超时时间
        return  new RestTemplate(factory);
    }
//    指定负载均衡策略
    @Bean
    public IRule rule(){
        return  new RandomRule();
    }
}
